package UserRouter

import (
	"fmt"
	UserDb "gitee.com/under-my-umbrella/gocode/db/user"
	"github.com/gin-gonic/gin"
	"golang.org/x/crypto/bcrypt"
)
func SetupUsersRoutes(api *gin.RouterGroup) {
	users := api.Group("/users")
	users.POST("/register", UserRegister)
	users.POST("/login", UserLogin)
}

// 用户注册
func UserRegister(c *gin.Context){
	var user UserDb.User
	// 获取请求参数，并校验, 校验用户名和密码,请求参数为json格式
	if err := c.BindJSON(&user); err != nil {
		c.JSON(400, gin.H{
			"code": 0,
			"msg": "请求参数错误",
		})
		return
	}
	username := user.Username
	password := user.Password
	fmt.Println(username, password)
	// 生成哈希密码
	hashedPassword, _ := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost)
	// 调用数据库
	if !UserDb.CheckUser(username) {
		// 继续注册,对密码进行加密
		if UserDb.CreateUser(username, hashedPassword) {
			// 注册成功
			c.JSON(200, gin.H{
				"code": 1,
				"msg": "注册成功",
			})
		}
	} else {
		// 用户已存在
		c.JSON(200, gin.H{
			"code": 0,
			"msg": "用户已存在",
		})
	}
}

// 用户登录
func UserLogin(c *gin.Context){
	var user UserDb.User
	// 获取请求参数，并校验, 校验用户名和密码,请求参数为json格式
	if err := c.BindJSON(&user); err != nil {
		c.JSON(400, gin.H{
			"code": 0,
			"msg": "请求参数错误",
		})
		return
	}
	username := user.Username
	password := user.Password
	fmt.Println(username, password)
	// 调用数据库
	if UserDb.CheckUser(username) {
		if UserDb.GetUser(username, []byte(password)) {
			// 通过username获取用户id
			UserId, err := UserDb.GetUserIdByUsername(username)
			if err != nil {
				return
			}
			// 登录成功
			c.JSON(200, gin.H{
				"code": 1,
				"msg": "登录成功",
				"UserId": UserId,
			})
		} else {
			// 密码错误
			c.JSON(200, gin.H{
				"code": 0,
				"msg": "密码错误",
			})
		}
	} else {
		// 用户不存在
		c.JSON(200, gin.H{
			"code": 0,
			"msg": "用户不存在",
			})
		}
	}
